package main

import (
	"fmt"
	"math"
	"net"
	"net/http"
	"net/rpc"
)

//单个参数微服务调用示列

/**
于多个微服务之间的通信方式：
同步：rest api, RPC
异步：消息队列
RPC:远程过程调用(服务端和客户端(服务消费端)俩个角色)

服务方法定义格式：
func (t *T) MethodName(request T1,response *T2)error{
	//todo...
	return nil
}
 */

type MathUtil struct {

}

//计算圆面积
func (m *MathUtil)CalculationArea(r float32,area *float32)error{
	*area = math.Pi * r * r
	return nil
}

func main(){
	//获取指针对象
	mathUtil := new(MathUtil)
	//将rpc默认服务上发布一个mathUtil计算服务
	err := rpc.Register(mathUtil)
	if err!=nil{
		panic(err)
	}
	//为rpc message的消息http处理器注册到默认服务器
	rpc.HandleHTTP()

	//开启请求监听
	listen,err := net.Listen("tcp",":8081")
	if err!=nil {
		panic(err)
	}
	fmt.Println("server start success ...")
	//开启服务
	err = http.Serve(listen,nil)
	if err !=nil{
		panic(err)
	}
}
